package pe.com.ztaxi.taxis.model;

import java.beans.Transient;
import java.text.DecimalFormat;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@Table
public class Destino {

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	
	@JoinColumn(name = "punto")
	@ManyToOne(optional = false, fetch = FetchType.EAGER,cascade = CascadeType.ALL)
	private Punto puntoDestino;
	
	@Column
	private Date horaInicioDestino;
	
	@Column
	private Date horaLlegadaDestino;
	
	@Column
	private Double peaje;
	
	@Column
	private Double estacionamiento;
	
	@Column
	private Double otros;
	
	@Column
	private Double tarifa;	
	
	@JsonIgnore 
	@ManyToOne
	@JoinColumn(name = "ordenServicio")
	private OrdenServicio ordenServicio;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Punto getPuntoDestino() {
		return puntoDestino;
	}
	public void setPuntoDestino(Punto puntoDestino) {
		this.puntoDestino = puntoDestino;
	}
	public Date getHoraInicioDestino() {
		return horaInicioDestino;
	}
	public void setHoraInicioDestino(Date horaInicioDestino) {
		this.horaInicioDestino = horaInicioDestino;
	}
	public Date getHoraLlegadaDestino() {
		return horaLlegadaDestino;
	}
	public void setHoraLlegadaDestino(Date horaLlegadaDestino) {
		this.horaLlegadaDestino = horaLlegadaDestino;
	}
	public Double getPeaje() {
		return peaje;
	}
	public void setPeaje(Double peaje) {
		this.peaje = peaje;
	}
	public Double getEstacionamiento() {
		return estacionamiento;
	}
	public void setEstacionamiento(Double estacionamiento) {
		this.estacionamiento = estacionamiento;
	}
	public Double getOtros() {
		return otros;
	}
	public void setOtros(Double otros) {
		this.otros = otros;
	}
	public Double getTarifa() {
		return tarifa;
	}
	public void setTarifa(Double tarifa) {
		this.tarifa = tarifa;
	}
	public OrdenServicio getOrdenServicio() {
		return ordenServicio;
	}
	public void setOrdenServicio(OrdenServicio ordenServicio) {
		this.ordenServicio = ordenServicio;
	}	
	
	@JsonIgnore
	@Transient
	public String getMinutosDemora(){
		float dif = getHoraLlegadaDestino().getTime() - getHoraInicioDestino().getTime();
		DecimalFormat df = new DecimalFormat("#.##");
		return df.format(dif / 60000);
	}
	
	@JsonIgnore
	@Transient
	public String getTotalHoras(){
		float dif = this.getHoraLlegadaDestino().getTime() - this.getHoraInicioDestino().getTime();
		DecimalFormat df = new DecimalFormat("#.##");
		return df.format(dif / 3600000);
	}
	
	@JsonIgnore
	@Transient
	public Double getTotalTarifa(){
		if(peaje != null && estacionamiento != null){
			return tarifa + peaje + estacionamiento;
		} else {
			if(peaje != null){
				return tarifa + peaje;
			} else {
				if(estacionamiento != null){
					return tarifa + estacionamiento;
				} else {
					return tarifa;
				}
				
			}
		}
		
	}
	
}
